/**
 * 分页使用方法 必须有jquery支持
 * @parm id <xx id='id'>innerHtml</xx>
 * @param pagerJsonObj pager json 对象
 * @author wdfang
 * @time 2013-03-13 23:05:48
 */ 
var PageView = function(id){
	var self = this;
	this.id = id;
	/**
	 * 总页数
	 */
	this._pageCount = 0;
	/**
	 * 当前显示页数
	 */
	this._pageNumber = 1;
	/**
	 * 当前设定每页显示条数 即：显示多少条 
	 * 		这个值必须在 _pageList 之内包含
	 * 初始值为10条
	 */
	this._pageSize = 10;
	/**
	 * 总条数
	 */
	this._recordCount = 0;
	/**
	 * 当前设定每页显示条数 的可选择数量
	 */
	this._pageList = [5,10,20,30,50,100];
	/**
	 * 当前控件所处的HTML节点引用.
	 * @type DOMElement
	 */
	this.container = null;
	
	/**
	 * 外部接口
	 * 外部调用 来初始化 默认的 pageSize 和 pageList
	 * 	此调用要放在渲染方法前面
	 */
	this.setInitPara = function(pageSize,pageList){
		this._pageSize = pageSize;
		this._pageList = pageList;
	};

	/**
	 * 控件使用者重写本方法, 获取翻页事件, 可用来向服务器端发起AJAX请求.
	 * 如果要取消本次翻页事件, 重写回调函数返回 void.
	 * @param {int} pageNumber: 被选中的页码.
	 * @param {int} pageSize: 被选中的每页显示条数.
	 * @returns {Boolean} 返回false表示取消本次翻页事件.
	 * @event
	 * @example:
	 *  var pager=new PageView('pager_div');
	 *  pager.onclick = function(pageNumber, pageSize){
	 *		document.form1.action=".action?";
	 *		document.form1.submit();
	 *		return jsonObj;
	 *  };
	 *  pager.onclick = function(pageNumber, pageSize){
	 *		var json = {
	 *			pageCount:10,
	 *			pageNumber:2,
	 *			pageSize:10,
	 *			recordCount:100
	 *		};
	 *		return json;
	 *	};
	 */
	this.onclick = function(pageNumber,pageSize){
		return;
	};
	
	/**
	 * 外调
	 * 执行函数
	 * 使用时：
	 * var pager=new PageView('pager_div');
	 * pager.execute();
	 * 如果有pagerJsonObj 则为
	 * pager.execute(pagerJsonObj);
	 */
	this.execute = function(pagerJsonObj){
		/**
		 * 调用函数
		 * 		_setInitVal()
		 * 执行初始化操作
		 */
		if(typeof(pagerJsonObj)!='undefined'){
			this._setInitVal(pagerJsonObj);
		}
		/**
		 * 调用函数
		 * 		_render()
		 * 执行渲染操作
		 */
		this._render();
	};
	
	/**
	 * 内部方法.
	 */
	this._goSeach = function(pageNumber){
		var pageSize = $('#countperpagesizeselect').attr('value');
		if(!pageSize){
			pageSize= this._pageSize;
		}
		/**
		 *  调用salt.onclick方法
		 */
		var pagerJsonObj = self.onclick(pageNumber,pageSize);
		if(typeof(pagerJsonObj)!='undefined'){
			/**
			 * 分页页码数据初始赋值
			 */
			self._setInitVal(pagerJsonObj);
			self._render();
		}else{	
			$('#countperpagesizeselect').find('option').each(function(){
				if($(this).attr('value')==self._pageSize){
					$(this).attr('selected',true);
				}
			});
			$('#countperpagenumberselect').find('option').each(function(){
				if($(this).attr('value')==self._pageNumber){
					$(this).attr('selected',true);
				}
			});
		}
	};
	
	/**
	 * 内部方法
	 * 根据传入的对象获得页的所需值
	 */
	this._setInitVal = function(pagerJsonObj){
		if(typeof(pagerJsonObj)!='undefind'){
			/**
			 * _pageCount 赋值
			 */
			if(typeof(pagerJsonObj.pageCount)!='undefined'){
				if(pagerJsonObj.pageCount>this._pageCount)
					this._pageCount = pagerJsonObj.pageCount;
			}
			/**
			 * _pageNumber 赋值
			 */
			if(typeof(pagerJsonObj.pageNumber)!='undefined'){
				if(pagerJsonObj.pageNumber>this._pageNumber)
					this._pageNumber = pagerJsonObj.pageNumber;
			}
			/**
			 * _pageSize 赋值
			 */
			if(typeof(pagerJsonObj.pageSize)!='undefined'){
				if(pagerJsonObj.pageSize>this._pageSize)
					this._pageSize = pagerJsonObj.pageSize;
			}
			/**
			 * _recordCount 赋值
			 */
			if(typeof(pagerJsonObj.recordCount)!='undefined'){
				if(pagerJsonObj.recordCount>this._recordCount)
					this._recordCount = pagerJsonObj.recordCount;
			}
		}
	};

	/**
	 * 内置函数
	 * 
	 * 渲染控件.
	 */
	this._render = function(){
		var div = document.getElementById(self.id);
		div.view = self;
		self.container = div;
		
		var str = '';
		str += '<div class="pageViewer" id="pageViewer">\n';
		
		str += '<div style="float: left;">\n';
		str += '<span>第'+ self._pageNumber +'页/共'+ self._pageCount +'页共'+ self._recordCount +'条记录</span>\n';
		str += '<span>每页显示<select id="countperpagesizeselect" name="countperpagesizeselect" style="width: 80px;">';
		for(var i=0;i<self._pageList.length;i++){
			if(self._pageList[i] == self._pageSize){
				str += '<option value="'+self._pageList[i]+'" selected>'+self._pageList[i]+'</option>';
			}else{
				str += '<option value="'+self._pageList[i]+'">'+self._pageList[i]+'</option>';
			}
		}
		str += '</select> 条记录</span>\n';
		str += '</div>\n';
		
		str += '<div style="float: right;">\n';
		str += '<span><a href="javascript:void(0)" id="clickpagenumfirst">首页</a>';
		if(this._pageNumber > 1){
			str += '<a href="javascript:void(0)" id="clickpagenumbef">上一页</a>';
		}
		if(this._pageNumber < self._pageCount){
			str += '<a href="javascript:void(0)" id="clickpagenumaft">下一页</a>';
		}
		str += '<a href="javascript:void(0)" id="clickpagenumlast">尾页</a></span>\n';
		str += '<span>跳转到：<select name="countperpagenumberselect" id="countperpagenumberselect">';
		for(var i = 1; i <= self._pageCount; i++) {
			 if(i == self._pageNumber){
				 str += '<option value="'+i+'" selected>'+i+'</option>';
			 }else{
				 str += '<option value="'+i+'">'+i+'</option>';
			 }
		 }
		str += '<span>\n';
		str += '</div>\n';
		
		str += '</div>\n';

		$(self.container).empty().html(str);
		
		//首页点击
		$(self.container).find('#clickpagenumfirst').click(function(){
			self._goSeach(1);
		});
		//上一页
		$(self.container).find('#clickpagenumbef').click(function(){
			self._goSeach(self._pageNumber-1);
		});
		//下一页
		$(self.container).find('#clickpagenumaft').click(function(){
			self._goSeach(self._pageNumber+1);
		});
		//尾页
		$(self.container).find('#clickpagenumlast').click(function(){
			self._goSeach(self._pageCount);
		});
		//每页显示select 点击
		$(self.container).find('#countperpagesizeselect').change(function(){
			self._goSeach(1);
		});
		//跳转到select 点击
		$(self.container).find('#countperpagenumberselect').change(function(){
			self._goSeach($(this).attr('value'));
		});
	};
};
